Apple II J-plus F8 ROM Notes
(Differences From The Standard Apple II Autostart ROM)
Written by Nick Westgate, with thanks to Philip Lord

Changes:
- the monitor REGDSP (display registers) routine has been removed
- the RDKEY main loop has been modified to flash an underscore cursor
- the RDKEY main loop now checks for ctrl-T to toggle katakana/ASCII display

Notes:
- all code differences are in the F8 ROM (the video/chargen ROM is also different)
- REGDSP was removed solely to make room for the new underscore cursor code
- annunciator 2 is connected to the video ROM at A10 (overrides character's high bit)
- annunciator 2 is normally set ($C05D) which disables katakana display
- the RESET handler already sets the annunciator on RESET (no change)
- when annunciator 2 is cleared ($C05C) katakana display is enabled
- katakana ctrl-T output toggling is implemented via the inverse mask byte at $32
- in Applesoft, INVERSE selects kana, FLASH selects inverse kana, NORMAL selects ASCII

Key:
- all comments begin with ";"
- all code changes are marked with "*"
- all new/changed entry points are marked with "**"
- changes deserving of further investigation are marked with "??"

D000-F7FF ; no changes in the D0 to F0 ROMs

FA59-   20 82 F8    JSR   $F882                      ; OLDBRK
FA5C-   20 2D FF    JSR   $FF2D    F8ROM:PRERR       ; * was JSR $FADA/REGDSP - now JSR $FF2D/PRERR

...

FAD7-   60          RTS                              ; ** was REGDSP (display registers) now removed
FAD8-   48          PHA                              ; ** new entry UNDRSC flash cursor using underscore
FAD9-   A9 0F       LDA   #$0F                       ; * 
FADB-   25 4F       AND   $4F                        ; * 
FADD-   D0 0C       BNE   $FAEB                      ; * 
FADF-   68          PLA                              ; * 
FAE0-   48          PHA                              ; * 
FAE1-   D1 28       CMP   ($28),Y                    ; * 
FAE3-   D0 02       BNE   $FAE7                      ; * 
FAE5-   A9 DF       LDA   #$DF                       ; * cursor value = underscore
FAE7-   91 28       STA   ($28),Y                    ; * 
FAE9-   E6 4F       INC   $4F                        ; * 
FAEB-   68          PLA                              ; * 
FAEC-   2C 00 C0    BIT   $C000    r:KBD  w:CLR80COL ; * duplicate original KEYIN2 functionality before return
FAEF-   60          RTS                              ; * end UNDRSC
FAF0-   AD 56 C0    LDA   $C056    rw:LORES          ; ** new sub GRMIX
FAF3-   AD 53 C0    LDA   $C053    rw:MIXSET         ; * ?? strange - this routine seems unnecessary - see SETGR
FAF6-   60          RTS                              ; * end GRMIX
FAF7-   EA          NOP                              ; * 
FAF8-   EA          NOP                              ; * 
FAF9-   EA          NOP                              ; * 
FAFA-   EA          NOP                              ; * 
FAFB-   EA          NOP                              ; * 
FAFC-   EA          NOP                              ; * end removed REGDSP sub

...

FB40-   AD 50 C0    LDA   $C050    rw:TXTCLR         ; SETGR
FB43-   20 F0 FA    JSR   $FAF0                      ; ** was LDA $C053 - now JSR new sub $FAFO/GRMIX
                                                     ; ?? strange - this change seems unnecessary
                                                     ; ?? only the GR command uses $FB40 (in this/earlier/later ROMs)
                                                     ; ?? $C056 is set for GR at $F390 (in this/earlier/later ROMs)
...

FBB3-   C9 94       CMP   #$94                       ; ** new sub CKCTRLT - check for ctrl-T pressed
FBB5-   D0 C1       BNE   $FB78                      ; * continue to VIDWAIT
FBB7-   A5 32       LDA   $32                        ; * yes, ctrl-T pressed
FBB9-   49 C0       EOR   #$C0                       ; * so modify INVFLG to toggle showing katakana
FBBB-   4C 46 FD    JMP   $FD46                      ; * end CKCTRLT - continue to new entry $FD46/TGLKANA

...

FD0C-   A4 24       LDY   $24                        ; RDKEY
FD0E-   B1 28       LDA   ($28),Y
FD10-   48          PHA
FD11-   29 3F       AND   #$3F
FD13-   09 40       ORA   #$40
FD15-   EA          NOP                              ; * was STA ($28/BASL),Y - now removed
FD16-   EA          NOP
FD17-   68          PLA
FD18-   6C 38 00    JMP   ($0038)
FD1B-   E6 4E       INC   $4E
FD1D-   D0 02       BNE   $FD21
FD1F-   E6 4F       INC   $4F
FD21-   20 D8 FA    JSR   $FAD8                      ; * was KEYIN2 BIT $C000/KBD - now JSR new entry $FAD8/UNDRSC
FD24-   10 F5       BPL   $FD1B
FD26-   91 28       STA   ($28),Y
FD28-   AD 00 C0    LDA   $C000    r:KBD  w:CLR80COL
FD2B-   2C 10 C0    BIT   $C010    r:KBDSTRB
FD2E-   60          RTS
FD2F-   20 0C FD    JSR   $FD0C    F8ROM:RDKEY
FD32-   20 A5 FB    JSR   $FBA5
FD35-   20 0C FD    JSR   $FD0C    F8ROM:RDKEY
FD38-   C9 9B       CMP   #$9B
FD3A-   F0 F3       BEQ   $FD2F
FD3C-   60          RTS
FD3D-   BD 00 02    LDA   $0200,X                    ; ** changed NOTCR
FD40-   20 ED FD    JSR   $FDED    F8ROM:COUT        ; * 
FD43-   4C 4D FD    JMP   $FD4D                      ; * 
FD46-   85 32       STA   $32                        ; ** new entry TGLKANA toggle katakana
FD48-   A9 94       LDA   #$94                       ; * 
FD4A-   4C 78 FB    JMP   $FB78    F8ROM:VIDWAIT     ; * end changed NOTCR

...

FDF9-   20 B3 FB    JSR   $FBB3    F8ROM:VERSION     ; * was JSR $FB78/VIDWAIT now JSR new sub $FBB3/CKCTRLT

...

FEBF-   60          RTS                              ; * was REGZ JMP REGDSP (removed) now RTS
FEC0-   EA          NOP                              ; *
FEC1-   EA          NOP                              ; * end changed REGZ
